//
//  Singleton.h
//  FindCars
//
//  Created by mac on 2019/8/24.
//  Copyright © 2019 zhiyiLiu. All rights reserved.
//

#ifndef Singleton_h
#define Singleton_h
// 单例定义代码放到一个.h中
// User 单例.h 的 写上 SINGLE_INT
// User 单例.m 中 写上 SINGLE_IMP


// Singleton.h头文件的代码
/**
 *  在需要使用目标类的地方 通过下面的语法调用
 *
 */
#define SINGLE(class) [class sharedInstance]


/**
 *  在目标类 .h文件中 @interface 中
 定义的宏
 *  @return 单例
 */
#define SINGLE_INT +(instancetype)sharedInstance;


/**
 *  在目标类 .m文件中 @implementation 中
 执行宏里面的方法
 *
 *  @return 单例
 */
#define SINGLE_IMP \
static id _instance = nil;\
+ (instancetype)sharedInstance\
{\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_instance = [[self alloc] init];\
});\
return  _instance;\
\
}\
+ (instancetype)allocWithZone:(struct _NSZone *)zone\
{\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
_instance = [super allocWithZone:zone];\
});\
return _instance;\
}\
\
- (id)copyWithZone:(NSZone *)zone\
{\
return  _instance;\
}\


#endif /* Singleton_h */
